home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / c / pthd-0.000 / pthd-0 / pthd-0.7 / src_signals / signal.c.1 < prev    next >
Encoding:
Text File  |  1995-08-16  |  1.7 KB  |  91 lines

  1. /*
  2.  * signal.c.1   Tests the sigwait() service.
  3.  */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <pthread.h>
  7. #include "utils.h"
  8.  
  9. #define THREADS ((int) 4)
  10. extern int getpid( void );
  11.  
  12. void
  13. waiter( void )
  14. {
  15.     sigset_t sigset;
  16.     int caught = FAILURE;
  17.  
  18.    sigemptyset( &sigset );
  19.    sigaddset( &sigset, SIGINT );
  20.    sigaddset( &sigset, SIGTERM );
  21.    sigaddset( &sigset, SIGHUP );
  22.    sigaddset( &sigset, SIGQUIT );
  23.  
  24.    pthread_sigmask( SIG_SETMASK, &sigset, NULL );
  25.  
  26.     switch((caught = sigwait( sigset )))
  27.     {
  28.       case SIGINT:
  29.         print_str("Caught SIGINT");
  30.         break;
  31.       case SIGTERM:
  32.         print_str("Caught SIGTERM");
  33.         break;
  34.       case SIGHUP:
  35.         print_str("Caught SIGHUP");
  36.         break;
  37.       case SIGQUIT:
  38.         print_str("Caught SIGQUIT");
  39.         break;
  40.       default:
  41.                 printf("Error: %d\n", caught );
  42.         break;
  43.  
  44.     }
  45.  
  46.     pthread_exit( (void *) caught );
  47. }
  48.  
  49. static pthread_t th[THREADS];
  50.  
  51. int 
  52. main( int argc, char *argv[] )
  53. {
  54.    int exit_status, st, i;
  55.    pthread_attr_t attr;
  56.  
  57.    printf("pid %d: Blocked %d %d %d %d\n", 
  58.            getpid(), SIGINT, SIGQUIT, SIGHUP, SIGTERM );
  59.  
  60.    /*
  61.     * Create some joinable threads each of which will inherit the
  62.     * main threads mask of blocked signals.
  63.     */
  64.    st = pthread_attr_init( &attr );
  65.    CHECK( st, "pthread_attr_init()");
  66.  
  67.    st = pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE );
  68.    CHECK( st, "pthread_attr_setdetachstate()");
  69.    for(i = 0; i < THREADS; i++ )
  70.    {
  71.        st = pthread_create( &th[i], &attr, (thread_proc_t) waiter, NULL ); 
  72.        CHECK(st, "pthread_create()");
  73.    }
  74.  
  75.    for(i = 0; i < THREADS; i++ )
  76.    {
  77.        st = pthread_join( th[i], (void **) &exit_status );
  78.        CHECK( st, "pthread_join()");
  79.    }
  80.  
  81.    st = pthread_attr_destroy( &attr );
  82.    CHECK( st, "pthread_attr_destroy()");
  83.  
  84.    return( EXIT_SUCCESS );
  85. }
  86.  
  87.  
  88.  
  89.  
  90.  
  91.